package com.palfund.threadpool;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

/**
 * 访问权限:修饰符.限定类或属性或方法的可见度.
 * public:共同的,没有限制
 * protected:受保护的,本类,同包,不同包中限于子类使用(继承关系中).
 * default:默认的,本类,同包.
 * private:私有的,本类
 * <p>
 * 在继承关系中无论是通过子类有参的构造方法还是无参的构造方法创建子类对象时总会先调用父类的无参的构造方法
 * <p>
 * 构造代码块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块.构造代码块在创建对象时被调用,
 * 每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数.
 * <p>
 * 静态代码块:static修饰的代码块,在本类中最先执行,并且只执行一次,用于给静态属性赋值。
 */
public class ExtendActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_extend);
        setTitle("Extend");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(Menu.NONE, 1, 1, "无参");
        menu.add(Menu.NONE, 2, 1, "有参");
        menu.add(Menu.NONE, 3, 1, "调用static 方法");
        menu.add(Menu.NONE, 4, 1, "子类对象向上转型");
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case 1:
                new Extend();
                break;
            case 2:
                new Extend("msg");
                break;
            case 3:
                Extend.staticTest();
                break;
            case 4:
                //子类对象向上转型
                Super supers = new Extend();
                supers.test();
                break;
            default:
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}
